package licode.unisop.single.platform.infrastructure.assembler;

import licode.unisop.provider.vo.SiAssetBrief;
import licode.unisop.provider.vo.SiAssetEntity;
import licode.unisop.provider.vo.SiAssetRelEntity;
import licode.unisop.single.platform.application.entity.AuthPlatformEntity;
import licode.unisop.single.platform.application.entity.PlatAssetPropEntity;
import licode.unisop.single.platform.application.entity.PlatTerminalEntity;
import licode.unisop.single.platform.application.entity.PlatformEntity;
import licode.unisop.single.platform.infrastructure.repository.po.*;
import org.mapstruct.Mapper;

import java.util.List;

/**
 * uni-platform-single
 *
 * @author licode
 * @date 2016-08-27 15:30:58
 */
@Mapper(componentModel = "spring", uses = {DataTypeConverter.class})
public interface UniPlatformSingleAssembler {

    AuthPlatformPO fromAuthPlatformEntity(AuthPlatformEntity source);
    AuthPlatformEntity fromAuthPlatform(AuthPlatformPO source);

    PlatformPO fromPlatformEntity(PlatformEntity source);
    PlatformEntity fromPlatform(PlatformPO source);
    List<PlatformPO> fromPlatformEntity(List<PlatformEntity> source);
    List<PlatformEntity> fromPlatform(List<PlatformPO> source);

    PlatAssetRelPO fromPlatAssetRelEntity(SiAssetRelEntity source);
    SiAssetRelEntity fromPlatAssetRel(PlatAssetRelPO source);
    List<PlatAssetRelPO> fromPlatAssetRelEntity(List<SiAssetRelEntity> source);
    List<SiAssetRelEntity> fromPlatAssetRel(List<PlatAssetRelPO> source);

    PlatAssetPropPO fromPlatAssetPropEntity(PlatAssetPropEntity source);
    PlatAssetPropEntity fromPlatAssetProp(PlatAssetPropPO source);
    List<PlatAssetPropPO> fromPlatAssetPropEntity(List<PlatAssetPropEntity> source);
    List<PlatAssetPropEntity> fromPlatAssetProp(List<PlatAssetPropPO> source);

    PlatformAssetPO fromPlatAssetEntity(SiAssetEntity source);
    SiAssetEntity fromPlatAsset(PlatformAssetPO source);
    List<PlatformAssetPO> fromPlatAssetEntity(List<SiAssetEntity> source);
    List<SiAssetEntity> fromPlatAsset(List<PlatformAssetPO> source);

    SiAssetBrief toAssetBrief(PlatformAssetPO source);
    List<SiAssetBrief> toAssetBrief(List<PlatformAssetPO> source);

    PlatTerminalPO fromPlatTerminalEntity(PlatTerminalEntity source);
    PlatTerminalEntity fromPlatTerminal(PlatTerminalPO source);
    List<PlatTerminalPO> fromPlatTerminalEntity(List<PlatTerminalEntity> source);
    List<PlatTerminalEntity> fromPlatTerminal(List<PlatTerminalPO> source);
}
